/***************************************************************************
 创建者：       hualei
 开始时间：    2018.09.10
 copyright:(C) 深圳市华友高科有限公司
 修改说明：（每次有修改就添加一条，带有 修改人，修改时间，修改描述）
      (1) 增加点位载入功能,支持:编辑点位载入,地图选择点位载入,当前位置点位载入

 ***************************************************************************
 *   MOVE_FREE 自由导航指令属性编辑视窗测试用代理类
 *
 ***************************************************************************/
#ifndef MOVEFREEINSTRUCTIONDELEGATE_H
#define MOVEFREEINSTRUCTIONDELEGATE_H

#include <QWidget>
#include <QObject>
#include "../MoveFreeInstructionView/movefreeinstructionview.h"
#include "../MoveFreeInstructionView/movefreeinstructiontrackview.h"
#include "movefreeinstructiondelegate_global.h"
#include <QList>

class MapView;
class GlobalData;
class ProgramRegExp;

/**
 * @brief The MoveFreeInstructionDelegate class   MOVE_FREE 自由导航指令属性编辑视窗测试用代理类
 */
class MOVEFREEINSTRUCTIONDELEGATESHARED_EXPORT MoveFreeInstructionDelegate : public QObject
{
    Q_OBJECT

public:
    /**
     * @brief MoveFreeInstructionDelegate       构造函数
     * @param parent
     */
    MoveFreeInstructionDelegate(MapView *mapViewIn,GlobalData *globalDataIn,CommunicateNormalDelegate *communicateNormalDelegateIn
                                ,QWidget *parent = 0);

    /**
     * @brief initView  初始化界面成员变量
     */
    void initView();

public:

    /**
     * @brief moveFreeInstructionView   自由导航指令属性视图
     */
    MoveFreeInstructionView *moveFreeInstructionView;

    /**
     * @brief moveFreeInstructionTrackView   轨道文件选择视图
     */
//    MoveFreeInstructionTrackView *moveFreeInstructionTrackView;

public slots:
    /**
     * @brief finishEditInstruction_Slot        完成指令属性编辑槽函数
     */
    void finishEditInstruction_Slot();

    /**
     * @brief clearNote       清除注释槽函数
     */
    void clearNote();

    /**
     * @brief moveFreeTrackFileSlot         轨道文件选择槽函数
     * @param trackFilePath                 轨道文件路径
     * @param modeIndex                     文件索引号
     */
    void moveFreeTrackFileSlot(QString trackFilePath, QModelIndex modeIndex);

    /**
     * @brief readDPointSlot                载入点位数据槽函数
     * @param pointNum                      点位数量
     */
    void recordDPointSlot(int recordType);

    /**
     * @brief moveToDPointSlot               移动到点槽函数
     * @param dpointNum                      点位数量
     */
    void moveToDPointSlot(int dpointNum);

private:

    // 米转换位毫米
    void convertMetersToMillimeters(double& meters1, double& meters2);

signals:

    void pointChanged();

    /**
     * @brief msgBoxSignal          点位载入消息信号
     * @param type                  消息视窗类型
     * @param title                 消息标题
     * @param text                  消息内容
     */
    void msgBoxSignal(int type,QString title,QString text);

    /**
     * @brief setIsSaveSignal       是否保存信号
     * @param status                保存状态
     */
    void setIsSaveSignal(bool status);


private:

    // 地图视图类，提供获取地图点位
    MapView *mapView;
    /**
     * @brief globalData
     */
    GlobalData *globalData;

//    QList <int> dpointIndexList;

    ProgramRegExp* programRegExp;
    CommunicateNormalDelegate *communicateNormalDelegate;

};

#endif // MOVEFREEINSTRUCTIONDELEGATE_H
